package com.leetcode.array;

/**
 * 搜索二维矩阵 II
 * 编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性：
 * 每行的元素从左到右升序排列。
 * 每列的元素从上到下升序排列。
 *
 * 示例 1：
 * {
 *   {1,  4, 7,11,15}
 *   {2,  5, 8,12,19}
 *   {3,  6, 9,16,22}
 *   {10,13,14,17,24}
 *   {18,21,23,26,30}
 * }
 * 输入：matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
 * 输出：true
 * 示例 2：
 * {
 *   {1,  4, 7,11,15}
 *   {2,  5, 8,12,19}
 *   {3,  6, 9,16,22}
 *   {10,13,14,17,24}
 *   {18,21,23,26,30}
 * }
 * 输入：matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
 * 输出：false
 *
 *提示：
 * m == matrix.length
 * n == matrix[i].length
 * 1 <= n, m <= 300
 * -109<= matrix[i][j] <= 109
 * 每行的所有元素从左到右升序排列
 * 每列的所有元素从上到下升序排列
 * -109<= target <= 109
 *
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode-cn.com/leetbook/read/top-interview-questions/xmjzs7/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
class Code240 {
    public static void main(String[] args) {
        int[][] matrix = {{1,4,7,11,15},{2,5,8,12,19},{3,6,9,16,22},{10,13,14,17,24},{18,21,23,26,30}};
        int target = 0;
        boolean b = searchMatrix(matrix, target);
        System.out.println(b);
    }
    public static boolean searchMatrix(int[][] matrix, int target) {
        int x = matrix.length-1;
        int y = 0;
        while (x >= 0 && y < matrix[0].length){
            if(matrix[x][y] == Integer.MAX_VALUE){
                return false;
            }else if(matrix[x][y] == target){
                return true;
            }else if(matrix[x][y] < target){
                matrix[x][y] = Integer.MAX_VALUE;
                y++;
            } else if(matrix[x][y] > target){
                matrix[x][y] = Integer.MAX_VALUE;
                x--;
            }
        }
        return false;
    }
}
